package model

import (
	"time"
)

// Account 定义账号表的模型
type Account struct {
	ID         int64     `gorm:"primaryKey;autoIncrement;comment:自增ID" json:"id"`
	Username   string    `gorm:"type:varchar(64);not null;comment:数据库用户" json:"username"`
	Password   string    `gorm:"type:varchar(128);not null;comment:密码(注意：在实际应用中，密码应加密存储)" json:"password"`
	UserType   string    `gorm:"type:varchar(12);comment:用户类型, 读写rw，只读ro, 管理admin" json:"user_type"`
	ClusterID  *int      `gorm:"comment:集群ID，对应cluster的id" json:"cluster_id"`
	Cluster    *Cluster  `gorm:"foreignKey:ClusterID" json:"cluster"`
	DatabaseID *int      `gorm:"comment:数据库ID，对应database的id" json:"database_id"`
	Database   *Database `gorm:"foreignKey:DatabaseID" json:"database"`
	DBType     string    `gorm:"type:varchar(10);not null;comment:数据库类型：MySQL | PostgreSQL" json:"db_type"`
	Remark     string    `gorm:"type:varchar(255);not null;comment:备注信息" json:"remark"`
	CreateTime time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
	IsDelete   bool      `gorm:"type:boolean;default:false;comment:逻辑删除标记，FALSE表示未删除，TRUE表示已删除" json:"is_delete"`
}

// TableName 指定表名
func (Account) TableName() string {
	return "account"
}

type AccountListRequest struct {
	Username     string `form:"username" json:"username"`
	UserType     string `form:"user_type" json:"user_type"`
	ClusterID    *int   `form:"cluster_id" json:"cluster_id"`
	DatabaseID   *int   `form:"database_id" json:"database_id"`
	DBType       string `form:"db_type" json:"db_type"`
	Search       string `json:"search"`
	Page         int64  `form:"page" json:"page" default:"1"`
	PageSize     int64  `form:"page_size" json:"page_size" default:"10"`
	ShowDatabase bool   `form:"show_database" json:"show_database"`
	ShowCluster  bool   `form:"show_cluster" json:"show_cluster"`
}

type AccountListResponse struct {
	Count    uint64     `json:"count"`
	Records  []*Account `json:"records"`
	Page     int64      `json:"page"`
	PageSize int64      `json:"page_size"`
}
